1020 DIM U%(22):FOR I=0 TO 21:READ U%(I):NEXT:DATA&H8B55,&HB8EC,&H0600,&H07B7,&H768B,&H8A0C,&H8B2C,&HA76,&HC8A,&H768B,&H8A08,&H8B34,&H676,&H148A,&HCDFE,&HC9FE,&HCEFE,&HCAFE,&H10CD,&HCA5D,&H8,&H0
1030 OPEN "DD" FOR INPUT AS 1: INPUT #1,DR$:CLOSE
1040 DEF FNPN(S)=CVI(MID$(P$(0),S*2-1,2))
1041 DEF FNMFP(F)=CVI(MID$(P$(F),1,2))
1042 DEF FNNP(F)=CVI(MID$(P$(F),3,2))
1043 DEF FNL(Y)=7+(Y MOD 10)+(-10*(Y MOD 10 = 0))
1048 MF$="###################,.##"
1050 IF CHR$(SCREEN(2,27))<>"T" THEN CLS: COLOR 0,7:PRINT SPACE$(240):LOCATE 2,27:PRINT "The Omaha DataBase Program":LOCATE 1,1:PRINT"KEY";STRING$(78,"THEN");"CLOSE":LOCATE 2,1:PRINT "OPEN":LOCATE 2,80:PRINT "OPEN":LOCATE 3,1:PRINT "SCREEN";STRING$(78,"THEN");"LOAD": COLOR 7,0
1055 COLOR 0,7: LOCATE 3,1: PRINT "SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHEN":COLOR 7,0
1810 FI$(F)=DR$(F)+":"+F$(F):QZ=4:IF F=0 THEN QZ=10:
1820 OPEN FI$(F) AS #F+1 LEN=LL(F):FIELD #F+1,QZ AS P$(F):FOR Y=1 TO TE(F)
1830 IF QZ>510 THEN FIELD #F+1,255 AS Q1$,255 AS Q2$,QZ-510 AS Q3$,BL(F,Y) AS X$(F,Y) ELSE IF QZ>255 THEN FIELD #F+1,255 AS Q1$,QZ-255 AS Q2$,BL(F,Y) AS X$(F,Y) ELSE IF QZ=<255 THEN FIELD #F+1,QZ AS Q1$,BL(F,Y) AS X$(F,Y)
1840 QZ=QZ+BL(F,Y):NEXT
1850 RETURN
1860 FI$=DR$+":REC":OPEN FI$ FOR INPUT AS #7
1870 IF EOF(7) THEN 1880
1875 FOR G=0 TO TF:INPUT #7,NR(G),DL(G):NEXT:
1880 CLOSE #7:FOR G=0 TO TF: IF NR(G)=0 THEN NR(G)=1:
1890 NEXT
1900 RETURN
1910 FI$=DR$+":REC":OPEN FI$ FOR OUTPUT AS #7: FOR G=0 TO TF:WRITE#7,NR(G),DL(G):NEXT:CLOSE #7:RETURN
3030 LOCATE 7,1:PRINT " This program will RE-ARRANGE the order in which each sub-file record is linked to its master file record and will REPAIR all pointers within all files."
3040 PRINT " You MUST enter the sort instructions for EACH sub-file. The records will be sorted first by the Master Record # to which they are linked. You can then indicate two other fields by which they are to be sorted."
3050 PRINT" REPAIR is necessary when one of the pointers has been 'FOULED' up. This can be due to computer or disk error, or if the computer is interrupted when a record is written or deleted."
3060 PRINT " The computer has several kinds of pointers. There are pointers on each record in the Master file that link that record with its sub-records on each of the five sub-files. Each record on the sub-file has a pointer to its Master"
3070 PRINT "File Record and the next record in the sub-file to which it is linked. In addition to this all the deleted records within each file are linked to each others so they can be used up."
3080 LOCATE 23,3:COLOR 18:PRINT "Hit any key to return to menu ";:COLOR 7,0
4170 IF T(F,Y)=3 AND L$="" AND K(F,K,2)=BB(F,Y) THEN A$(F) =A$(F)+","+MID$(STR$(BB(F,Y)+4),2)+",2,N,A,"+MID$(STR$(BB(F,Y)),2)+",4,N,A":K(F,K,1)=Y:K(F,K,2)=BB(F,Y)+4:K(F,K,3)=99:GOTO 4270
4180 IF VAL(L$)=0 THEN K(F,K,3)=BL(F,Y):GOTO 4210
4190 IF VAL(L$)<1 OR VAL(L$)>BL(F,Y) THEN K(F,K,3)=BL(F,Y):GOTO 4200
4310 IF A$="Y" OR A$="y" THEN GOSUB 1140:GOSUB 1150: GOTO 4030
4320 A$(F)=A$(F)+") Ad R("+MID$(STR$(LL(F)),2)+")"
4330 GOSUB 1170:GOSUB 1150:LOCATE 22,3: PRINT "NOW WRITING SORT PARAMETERS TO THE DISK"
4340 F$=DR$(F)+":"+F$(F)+".PRM":OPEN F$ FOR OUTPUT AS 1:PRINT #1,A$(F):CLOSE #1
4350 GOSUB 1170:NEXT F
4360 GOSUB 1130:LOCATE 4,1:PRINT "NOW SORTING"
4370 CHAIN "RPR",1000
5000 REM CHAIN TO THIS POINT TO RECONSTRUCT AND REPAIR FILES
5010 RUN
5020 GOSUB 1130:GOSUB 1170:GOSUB 1860
5030 LOCATE 22,3: PRINT "PLEASE TYPE ACCESS CODE ";:COLOR 9: PRINT "REPAIR";:COLOR 7,0: INPUT " TO PROCEED ==> ";AC$
5040 IF AC$<>"REPAIR" AND AC$<>"repair" AND AC$<>"Repair" THEN GOSUB 1260:GOTO 2000
5050 GOSUB 1150:GOSUB 1140:LOCATE 6,20:COLOR 15: PRINT "You may repair one or all of these files ":LOCATE 10,20:FOR F=0 TO TF: LOCATE ,20: PRINT F". "F$(F):NEXT: LOCATE ,20:PRINT F". ALL OF THESE FILES":COLOR 7,0
5090 GOSUB 1150:LOCATE 22,3: PRINT "ERASING POINTERS IN MASTER FILE"
5100 CLOSE:F=0:GOSUB 1800: REM OPEN MASTER FILE
5110 FOR X=1 TO 32500:
5120 LOCATE 23,3:PRINT X
5130 GET #1,X:IF ASC(X$(0,1))<>0 THEN 5150
5140 FOR Y=2 TO TE(0):IF ASC(X$(0,Y))=0 THEN NEXT: GOTO 5190: REM RECORD ALL BLANK, END OF FILE
5150 Y=TE(0)+1:
5160 IF AFLAG=1 AND LEFT$(P$(0),2)<>D$ THEN LSET P$(0)=MKI$(0)+MKI$(0)+MKI$(0)+MKI$(0)+MKI$(0):PUT #1,X
5170 IF AFLAG<>1 AND CH<>0 THEN LSET P$(0)=MID$(P$(0),1,(CH-1)*2)+MKI$(0)+MID$(P$(0),CH*2+1):PUT #1,X
5180 NEXT
5190 NR(0)=X:X=32500:
5200 IF AFLAG=0 THEN F=CH::GOSUB 1800: DL(F)=0:NR(F)=0: GOTO 5220
5210 FOR F=1 TO TF:GOSUB 1800:DL(F)=0:NR(F)=0
5220 GOSUB 1150:LOCATE 21,3: PRINT "WORKING ON SUB-FILE ";F": ";F$(F):LOCATE 22,3:PRINT "WORKING ON RECORD: ";:LOCATE 22,40:PRINT "MASTER RECORD ";
5230 FI$=DR$(F)+":"+F$(F)+".INX": OPEN FI$ AS 7 LEN=4: FIELD #7, 2 AS RN$,2 AS RY$:I=0
5240 I=1:GET #7,1: REC=CVI(RN$):IF NR=0 THEN EFLAG=1
5250 FOR X=1 TO 32500:
5260 LOCATE 22,23: PRINT REC;" ":
5270 GOSUB 6000
5280 IF REC=0 THEN 5450 ELSE GET #F+1,REC:IF ASC(X$(F,1))<>0 THEN 5300
5290 REM FOR Y=2 TO TE(F):IF ASC(X$(F,Y))=0 THEN NEXT:IF I=>REC THEN GOTO 5450 ELSE GOTO 5450: REM RECORD ALL BLANK, END OF FILE
5300 LOCATE 22,60:PRINT MFR;" "
5310 Y=TE(F)+1:IF LEFT$(P$(F),2)<> D$ THEN 5380
5320 REM *** DELETED RECORDS ****
5330 IF NR<>0 THEN GET #F+1,NR: IF LEFT$(P$(F),2)= D$ THEN GET #F+1,REC:LSET P$(F)= D$+MKI$(NR):PUT #F+1,REC:GOTO 5350: REM NEXT ONE IS DELETED TOO SO LINK FIRST ONE TO IT
5340 GET #F+1,REC:LSET P$(F)=D$+MKI$(0):PUT #F+1,REC: REM LAST DELETED RECORD
5350 IF DL(F)=0 THEN DL(F)=REC
5360 GOTO 5420
5370 REM **** REGULAR RECORDS ****
5380 MFR=FNMFP(F):IF MFR<1 OR MFR>NR(0) THEN GOTO 5430
5390 IF MFR<>OMFR THEN GET #1,MFR: LSET P$(0)=MID$(P$(0),1,(F-1)*2)+MKI$(REC)+MID$(P$(0),F*2+1):PUT #1,MFR:OMFR=MFR:REM IF POINTER TO SUB-FILE BLANK THEN POINT IT TO REC
5400 NEWPOINTER=0:IF NR<>0 THEN GET #F+1,NR:IF FNMFP(F)=MFR THEN NEWPOINTER=NR: REM IF NEXT RECORD IS LINKED TO THE SAME MASTER FILE RECORD, THEN LINK PREVIOUS RECORD TO IT
5410 GET #F+1,REC:LSET P$(F)=MID$(P$(F),1,2)+MKI$(NEWPOINTER):PUT #F+1,REC
5420 IF REC>NR(F)-1 THEN NR(F)=REC+1
5430 REC=NR:IF EFLAG=1 AND NR=0 THEN X=10001:EFLAG=0:GOTO 5450
9320 LOCATE 7,1: COLOR 9:PRINT "# TITLE TYPE BEGINNING LENGTH":COLOR 15
9330 E1=1:GOTO 9340
9340 IF E1+9=>TE(F) THEN E2=TE(F) ELSE E2=E1+ 9
9350 FOR Y=E1 TO E2
9360 IF Y=0 THEN LOCATE 8,1 ELSE LOCATE 8+(Y MOD 10)+(-10*(Y MOD 10 =0)),1
9370 PRINT Y". ";LEFT$(T$(F,Y)+" ",24);
9380 LOCATE ,22:IF T(F,Y)=1 THEN PRINT "ALPHA "; ELSE IF T(F,Y)=2 THEN PRINT "NUMBER"; ELSE IF T(F,Y)=3 THEN PRINT "DATE "; ELSE IF T(F,Y)=4 THEN PRINT "$$$.$$"; ELSE PRINT " ";
9390 PRINT " ";BB(F,Y);" ";BL(F,Y):NEXT:COLOR 7,0
9400 GOSUB 1150: IF E2<TE(F) THEN LOCATE 22,3: INPUT "Press the 'ENTER' key to continue ";AN$: IF VAL(AN$)<>0 THEN K$=AN$:RETURN 4100 ELSE GOSUB 1125:E1=E2+1:GOTO 9340
9410 RETURN
9500 COLOR 15:LOCATE 5,1: PRINT "SORT FOR : ";F$(F);" ENTRIES: ";TE(F);" LENGTH: ";LL(F)" DRIVE: ";DR$(F)
9510 LOCATE 7,1: COLOR 9:PRINT "# TITLE TYPE BEGINNING LENGTH":COLOR 15
9520 LOCATE 9,1: PRINT " 1. POINTER ----- 1 2"
9530 FOR K=1 TO 2:Y=K(F,K,1)
9540 PRINT K+1". ";LEFT$(T$(F,Y)+" ",24);
9550 LOCATE ,22:IF T(F,Y)=1 THEN PRINT "ALPHA "; ELSE IF T(F,Y)=2 THEN PRINT "NUMBER"; ELSE IF T(F,Y)=3 THEN PRINT "DATE "; ELSE IF T(F,Y)=4 THEN PRINT "$$$.$$"; ELSE PRINT " ";
9560 PRINT " ";K(F,K,2);" ";
9570 IF K(F,K,3)=99 THEN PRINT "2":LOCATE ,33:PRINT K(F,K,2)-4;" ";4:GOTO 9590
30000 OLDROW=CSRLIN:OLDCOL=POS(0):OPEN "ERROR" AS #7 LEN=176:FIELD #7,35 AS ER$(1),70 AS ER$(2),70 AS ER$(3):GET#7,ERR
30010 LOCATE 20,3:PRINT LEFT$(ER$(1),INSTR(ER$(1)," ")+(-40*INSTR(ER$(1)," ")=0));" IN LINE ";ERL;" (Press any key)":LOCATE 21,3:PRINT ER$(2):LOCATE 22,3:PRINT ER$(3):PLAY"MB":J9=2:FOR I9=1 TO 9:PLAY"L64T255O=J9;CC#DD#EFF#GG#AA#B":NEXT
30020 AE$=INKEY$:IF AE$=""THEN 30020 ELSE FOR EL=20 TO 22:LOCATE EL,3:PRINT STRING$(76,32);:NEXT:LOCATE OLDROW,OLDCOL:CLOSE#3:RESUME
40000 REM **********************************************************
40010 REM **********************************************************
40020 REM ** COPYRIGHT (C) 1984 GERALD E. GONDERINGER **
40030 REM ** The Omaha DataBase Program **
40040 REM ** $50.00 REGISTRATION FEE FOR USE OF PROGRAM **
40050 REM **********************************************************
40060 REM **********************************************************